package com.shortLinked.project.mq.producer;

import com.alibaba.fastjson.JSON;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.messaging.Message;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.stereotype.Component;

import java.util.Map;
import java.util.UUID;

import static com.shortLinked.project.common.constant.ColoredOutput.RED;
import static com.shortLinked.project.common.constant.ColoredOutput.RESET;
import static com.shortLinked.project.common.constant.RabbitMqConstant.SHORT_LINK_RABBIT_EXCHANGE;

/**
 * 短链接监控状态保存消息队列生产者
 */
@Slf4j
@Component
@RequiredArgsConstructor
public class ShortLinkStatsSaveProducer {
    private final RabbitTemplate rabbitTemplate;

    /**
     * 发送短链接监控统计消息到 rabbitmq
     */
    public void send(Map<String, String> producerMap) {
//        发送消息到rabbitmq
        System.out.println(RED+"这里是:send方法"+RESET);
        String keys = UUID.randomUUID().toString();
        producerMap.put("keys", keys);
        //生成一个唯一的 UUID，并将其作为消息的一个标识（keys）添加到 producerMap 中。
        // 这是为了确保每个消息都有一个唯一的标识符，便于追踪和管理
        Message<Map<String, String>> build = MessageBuilder
                .withPayload(producerMap)
                .build();
        //构建消息
        try {
            rabbitTemplate.convertAndSend(SHORT_LINK_RABBIT_EXCHANGE, "", build);
            //将消息发送到 RabbitMQ
            // "short_link_fanout_exchange"
            log.info("[消息访问统计监控] 消息发送结果：{}，消息Keys：{}", build, keys);
        } catch (Throwable ex) {
            log.error("[消息访问统计监控] 消息发送失败，消息体：{}", JSON.toJSONString(producerMap), ex);
            // 自定义行为...
        }
    }
}
